﻿#define _CRT_SECURE_NO_WARNINGS 1

////打印从1到最大的n位数
////
////描述
////输入数字 n，按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3，则打印出 1、2、3 一直到最大的 3 位数 999。
////1. 用返回一个整数列表来代替打印
////2. n 为正整数，0 < n <= 5
////示例1
////输入：1
////返回值：[1, 2, 3, 4, 5, 6, 7, 8, 9]
//
//#include<math.h>
//int* printNumbers(int n, int* returnSize) {
//	*returnSize = pow(10, n) - 1;
//	int* arr = (int*)malloc(sizeof(int) * (*returnSize));
//	for (int i = 0; i < *returnSize; i++)
//	{
//		arr[i] = i + 1;
//	}
//	return arr;
//
//}












////尼科彻斯定理
////
////描述
////验证尼科彻斯定理，即：任何一个整数m的立方都可以写成m个连续奇数之和。
////例如：
////1 ^ 3 = 1
////2 ^ 3 = 3 + 5
////3 ^ 3 = 7 + 9 + 11
////4 ^ 3 = 13 + 15 + 17 + 19
////输入一个正整数m（m≤100），将m的立方写成m个连续奇数之和的形式输出。
////数据范围：1\le m\le 100\1≤m≤100
////进阶：时间复杂度：O(m)\O(m) ，空间复杂度：O(1)\O(1)
////
////输入描述：
////输入一个int整数
////
////输出描述：
////输出分解后的string
////
////示例1
////输入：6
////输出：31 + 33 + 35 + 37 + 39 + 41
//
//#include<stdio.h>
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//
//    int i = pow(n, 2) - n + 1;
//    while ((n--) > 1)
//    {
//        printf("%d+", i);
//        i += 2;
//    }
//    printf("%d", i);
//
//    return 0;
//}












////错误的集合
////
////集合 s 包含从 1 到 n 的整数。不幸的是，因为数据错误，导致集合里面某一个数字复制了成了集合里面的另外一个数字的值，
////导致集合 丢失了一个数字 并且 有一个数字重复 。
////给定一个数组 nums 代表了集合 S 发生错误后的结果。
////请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。
////
////示例 1：
////输入：nums = [1, 2, 2, 4]
////输出：[2, 3]
////
////示例 2：
////输入：nums = [1, 1]
////输出：[1, 2]
//
//int compare(const void* p1, const void* p2)
//{
//    return *(int*)p1 - *(int*)p2;
//}
//
//int* findErrorNums(int* nums, int numsSize, int* returnSize) {
//    qsort(nums, numsSize, sizeof(int), compare);
//    int* arr = (int*)malloc(sizeof(int) * 2);
//    *returnSize = 2;
//    int num = 0;
//
//    for (int i = 0; i < numsSize; i++)
//    {
//        int ret = nums[i];
//        if (ret == num)
//            arr[0] = num;
//        else if (ret - num > 1)
//            arr[1] = num + 1;
//        num = ret;
//    }
//    if (nums[numsSize - 1] != numsSize)
//        arr[1] = numsSize;
//
//    return arr;
//}












////密码检查
////描述
////小明同学最近开发了一个网站，在用户注册账户的时候，需要设置账户的密码，为了加强账户的安全性，小明对密码强度有一定要求：
////1. 密码只能由大写字母，小写字母，数字构成；
////2. 密码不能以数字开头；
////3. 密码中至少出现大写字母，小写字母和数字这三种字符类型中的两种；
////4. 密码长度至少为8
////现在小明受到了n个密码，他想请你写程序判断这些密码中哪些是合适的，哪些是不合法的。
////
////输入描述：
////输入一个数n，接下来有n(n≤100)行，每行一个字符串，表示一个密码，输入保证字符串中只出现大写字母，小写字母和数字，字符串长度不超过100。
////输出描述：
////输入n行，如果密码合法，输出YES，不合法输出NO
//
//#include<stdio.h>
//int main()
//{
//    int n = 0;
//    while (scanf("%d", &n) != EOF)
//    {
//        char arr[100] = "";
//        scanf("%s", arr);
//
//        int len = strlen(arr);
//        if (len >= 8)
//        {
//            if (arr[0] >= '0' && arr[0] <= '9')
//                printf("NO\n");
//            int upper = 0;
//            int lower = 0;
//            int num = 0;
//            for (int i = 0; i < len; i++)
//            {
//                if (arr[i] >= 'a' && arr[i] <= 'z')
//                    lower++;
//                else if (arr[i] >= 'A' && arr[i] <= 'Z')
//                    upper++;
//                else if (arr[i] >= '0' && arr[i] <= '9')
//                    num++;
//            }
//            if (lower + upper + num >= 2)
//                printf("YES\n");
//            else
//                printf("NO\n");
//        }
//        else
//            printf("NO\n");
//    }
//    return 0;
//}